/***********************************************************************************************************************
 * ############################################# Application AdewebLite #############################################
 * AdewebLite Android est une application permettant de consulter des emplois du temps fournis par l'université UHP
 * avec ou sans connexion internet (informations gardées en mémoire à chaque synchronisation). Et utilisant la web
 * API ADE pour collecter les données.
 * @author Andrianjafintrimo Victor, Zanette Sébastien
 * 
 * Basée sur l'application du même nom, utilisant le flux RSS (données à traiter), de :
 * @author Schnell Michaël, Zanette Sébastien
 * **********************************************************************************************************************
 */

package ade.analyzer;

import java.util.ArrayList;
import ade.schedule.Lesson;
import ade.schedule.Schedule;

/**
 * Classe FeedAnalyzer, permet de construire des objets {@code  Leesson} à un emploi du temps à patir de du {@code FeedLesson},
 * récupéré.
 * @author  Zanette Sébastien, Andrianjafintrimo Victor
 */
public class FeedAnalyzer {

	protected static final int ROOMS = 0 ;
	protected static final int GROUPS = 1 ;
	protected static final int TEACHERS = 2 ;
	protected static final int TIME = 3 ;

	protected static final int UNKNOWN = 0 ;
	protected static final int IS_TIME = 1 ;
	protected static final int IS_GROUP = 2 ;
	protected static final int IS_TEACHER = 3 ;
	protected static final int IS_ROOM = 4 ;

	protected Schedule schedule ;
	protected ArrayList<FeedLesson> feeds ;

        /**
         * Nouvelle instance de <code>FeedAnalyzer</code>.
         * @param schedule emploi du temps
         * @param feeds liste de cours parsés
         */
	public FeedAnalyzer (Schedule schedule, ArrayList<FeedLesson> feeds) {
		this.schedule = schedule ;
		this.feeds = feeds ;
	}// FeedAnalyzer

	/**
         * Analyse le contenu des <code>FeedLesson</code> and construit les cours.
	 * Analyzes the content of the feeds and builds the Lessons.
	 */
	public void start () {
		this.schedule.ensureCapacity(this.feeds.size()) ;
		for(FeedLesson feed : this.feeds) {
                        StringBuilder roomsBuilder = new StringBuilder();
                        StringBuilder groupsBuilder = new StringBuilder();
                        StringBuilder teachersBuilder = new StringBuilder();
			Lesson l = new Lesson() ;

			//TODO Generate a lesson id -- Default one for the moment
			l.setLessonId(Integer.parseInt(feed.getId()));
			l.setTitle(feed.getName()) ;
			l.setSchedule(this.schedule.getName()) ;
			l.setType(0);
			l.setCreated(feed.getCreation());                        
                        
                        for (FeedResource fr : feed.getResources()){
                            if (fr.getCategory().equals("classroom")) {
                                roomsBuilder.append(",");
                                roomsBuilder.append(fr.getName());
                            }
                            else if (fr.getCategory().equals("trainee")) {
                                groupsBuilder.append(",");
                                groupsBuilder.append(fr.getName());
                            }
                            else if (fr.getCategory().equals("instructor") || fr.getCategory().equals("category5")) {
                                teachersBuilder.append(",");
                                teachersBuilder.append(fr.getName());
                            }
                        }
                        String rooms = roomsBuilder.toString();
                        String groups = groupsBuilder.toString();
                        String teachers = teachersBuilder.toString();
                        if (rooms.length()>0)
                            rooms = rooms.substring(1);
                        if (groups.length()>0)
                            groups = groups.substring(1);
                        if (teachers.length()>0)
                            teachers = teachers.substring(1);
                        
			l.setRoom(rooms);
			l.setGroups(groups);
			l.setTeachers(teachers);
                        l.setColor(feed.getColor());
                        l.setNote(feed.getNote());
                        
			l.setTime(insertDate(feed.getDate(), feed.getStartHour(), feed.getEndHour())) ;
			// Add the lesson
			this.schedule.append(l) ;                     
		}// for               
	}// start()

        /**
         * Change le format de la date avant l'insertion dans la base de données.
         * @param date date au format mm/dd/yyyy
         * @param startHour heure de début
         * @param endHour heure de fin
         * @return la date au format "yyyy/mm/dd HeureDebut HeureFin"
         */
        protected static String insertDate(String date, String startHour, String endHour) {
                //TO DO changer le format de la date pour l'insertion dans la BD
                String dateTime = date+" "+startHour+" - "+endHour;
                int posSpace = dateTime.indexOf(" ") ;
		String datePart = new String(dateTime.substring(0, posSpace)) ;
		String[] parts = datePart.split("/") ;
		StringBuilder invDate = new StringBuilder() ;
		invDate.append(parts[2]) ;
		invDate.append("/") ;
		invDate.append(parts[1]) ;
		invDate.append("/") ;
		invDate.append(parts[0]) ;
		invDate.append(new String(dateTime.substring(posSpace))) ;
		return invDate.toString() ;
        }
	

}// class FeedAnalyzer